home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / UTILS / GAMESDS3.DMS / GAMESDS3.adf / GDS_Examples.lha / Examples / sound / snd_na_right.c < prev    next >
C/C++ Source or Header  |  1994-11-14  |  4KB  |  132 lines

  1. /* this version does not allocate the Amiga sound channels in a system
  2.    friendly way.  It just uses 'em.
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <dos.h>
  9. #include <signal.h>
  10. #include <proto/exec.h>
  11.  
  12. #include <GameSmith:include/libraries/libraries.h>
  13. #include <GameSmith:include/libraries/libptrs.h>
  14. #include <GameSmith:include/sound/sound.h>
  15. #include <GameSmith:include/proto/all.h>
  16.  
  17. void ctrl_c(int);
  18.  
  19. struct sound_struct sample;
  20. int stop=0;                        /* ctrl-C break flag */
  21.  
  22. /***************************************************************************/
  23.  
  24. main(argc,argv)
  25. int argc;
  26. char *argv[];
  27.  
  28. {
  29.    int err,echo,temp,old_prio;
  30.  
  31.    if (argc < 2)
  32.       {
  33.       printf("\nUsage: SND file_name [loop value] [echo divisor] [volume cnt]\n");
  34.       printf("           [volume decrement] [period cnt] [period decrement] [period]\n");
  35.       exit(01);
  36.       }
  37.    signal(SIGINT,&ctrl_c);         /* set up break handler ANSI style */
  38.    sample.flags=SND_FAST;         /* load sample to Fast RAM if available */
  39.    if (gs_open_libs(DOS|GRAPHICS,0)) /* need DOS for reading file, and Graphics */
  40.       exit(02);                  /* sound sys uses Graphics lib to determine */
  41.                                  /* whether a PAL or NTSC machine for timing */
  42.    if (err=gs_load_iff_sound(&sample,NULL,argv[1]))
  43.       {
  44.       if (err == -4)               /* If not IFF, try to load raw */
  45.          {
  46.          if (err=gs_load_raw_sound(&sample,argv[1]))
  47.             {
  48.             printf("\nError loading raw sample.  Code = %d\n",err);
  49.             gs_close_libs();
  50.             exit(03);
  51.             }
  52.          else
  53.             printf("\n%s - Raw Sample\n\n",argv[1]);
  54.          }
  55.       else if (err == -7)         /* if couldn't load 2nd channel */
  56.          {
  57.          printf("\nUnable to load 2nd sound channel for stereo play\n");
  58.          }
  59.       else
  60.          {
  61.          printf("\nError loading IFF sample.  Code = %d\n",err);
  62.          gs_close_libs();
  63.          exit(03);
  64.          }
  65.       }
  66.    else
  67.       {
  68.       printf("\n%s - IFF 8SVX Sample\n\n",argv[1]);
  69.       }
  70.    if (argc >= 3)                  /* check for repeat value */
  71.       {
  72.       sample.repeat=atoi(argv[2]);
  73.       }
  74.    if (argc >= 4)                  /* check for echo divisor */
  75.       {
  76.       echo=atoi(argv[3]);
  77.       if (echo > 1)
  78.          {
  79.          temp=sample.length/echo;
  80.          if (temp)
  81.             {
  82.             sample.loop=sample.data+((sample.length-temp)*2);
  83.             }
  84.          }
  85.       }
  86.    if (argc >= 5)                  /* check for volume count */
  87.       {
  88.       sample.volcnt=atoi(argv[4]);
  89.       }
  90.    if (argc >= 6)                  /* check for volume decrement */
  91.       {
  92.       sample.volfade=atoi(argv[5]);
  93.       }
  94.    if (argc >= 7)                  /* check for period count */
  95.       {
  96.       sample.percnt=atoi(argv[6]);
  97.       }
  98.    if (argc >= 8)                  /* check for period decrement */
  99.       {
  100.       sample.perfade=atoi(argv[7]);
  101.       }
  102.    if (argc >= 9)                  /* check for new period value */
  103.       {
  104.       sample.period=atoi(argv[8]);
  105.       }
  106.    if (gs_open_sound(0,0,0,(4096/2)))   /* open sound system, don't alloc channels */
  107.       {
  108.       gs_free_sound(&sample);
  109.       printf("\nError opening sound system\n");
  110.       gs_close_libs();
  111.       exit(04);
  112.       }
  113.    gs_start_sound(&sample,CHANNEL1);      /* start right channel playing */
  114.    old_prio=gs_task_prio(-128);            /* lowest priority while sample plays */
  115.    while ((gs_sound_check()) && (!stop))   /* wait for all channels idle */
  116.       chkabort();                           /* and check for abort signal */
  117.    gs_task_prio(old_prio);
  118.    gs_stop_sound(CHANNEL1);               /* stop all sounds (if still active) */
  119.    gs_close_sound();                        /* shut down sound system */
  120.    gs_free_sound(&sample);                  /* release sound data when done */
  121.    gs_close_libs();                        /* close libs and end */
  122. }
  123.  
  124. /***************************************************************************/
  125.  
  126. void ctrl_c(signal)         /* ctrl-C handling ANSI fashion (SAS/C 6.xx) */
  127. int signal;
  128.  
  129. {
  130.    stop=1;                  /* set flag to quit */
  131. }
  132.